#include <iostream>
#include <sys/types.h>
#include <sys/resource.h>
#include <unistd.h>
#include <signal.h>

void handler(int signo)
{
    std::cout<< "signo : " << signo << std::endl;
    exit(1);
}

int main()
{
    for(int i = 0 ; i < 31 ; i++)
    {
        signal(i,handler);
    }

    // 资源不足，操作系统会通过发送信号杀死进程

    // signo : 24 --> 24) SIGXCPU
    // // CPU time limit exceeded (core dumped)
    // 限制累计CPU使用时间
    // struct rlimit rl;
    // rl.rlim_max = RLIM_INFINITY; // 硬限制，RLIM_INFINITY 代表没有限制
    // rl.rlim_cur = 1;  // 软限制 ， 软限制<=硬限制

    // setrlimit(RLIMIT_CPU,&rl);
    // while(1);


    // terminate called after throwing an instance of 'St9bad_alloc'
    //   what():  std::bad_alloc
    //  signo : 6 --> 6) SIGABRT
    // 限制使用内存资源
    struct rlimit rl;
    rl.rlim_max = RLIM_INFINITY; // 硬限制，RLIM_INFINITY 代表没有限制
    rl.rlim_cur = 1024 * 1024 * 50;  // 软限制 ， 软限制<=硬限制

    int cnt = 0;
    setrlimit(RLIMIT_AS,&rl);
    while(1)
    {
        int* p = new int[1024*1024];
        std::cout << "cnt : " << cnt++ <<std::endl;
        sleep(1);
    }

    return 0;
}